<?php
/**
 * Created by phpstrom.
 * User:wangyahe
 * Date: 2017/6/28
 * Time: 20:16
 */
//1.就是在app\system\module.php的控制器中进行协商构造函数来加载中间件进行登录的验证，还说有就是加载一个获得数据库中自定义模块的函数方法$assignModuleData
class Module{
	public function __construct(){
		$this->auth();
		$this->$assignModuleData();
	}
	public function assignModuleData(){
		//获得模块中的数据(查找是自定义的模块)
		$moduleData = Db::table('module')->where('module_is_system',0)->get();
		//将数据分配到页面中（这里只是进行分配数据并没有进行加载模板，因为模板已经加载过了）
		View::with('moduleData',$moduleData);
	}
	//然后就是到前台页面经数据循环出来，循环的时候是if判断，如果有数据就循环出来，否则不进行显示；
//	system\module\index,是在父级末班中进行改变；就是到resource\module.php中进行添加如下代码
//   <if value="$moduleData">
//<div class="panel-heading">
//<h4 class="panel-title">自定义插件</h4>
//<a class="panel-collapse" data-toggle="collapse" href="javascript:;">
//<i class="fa fa-chevron-circle-down"></i>
//</a>
//</div>
//<ul class="list-group menus">
//<foreach from="$moduleData" value="$v">----------就是在这里循环的数据
//<li class="list-group-item">
//<!--                        ?m=links&action=controller/admin/index-->
//<a href="{{url('admin.index',$v['module_name'])}}">{{$v['module_title']}}</a>---这里的跳转地址是使用url,调到addons\links\controller\admin.php\index();所以要去创建文件夹，创建控制器，模型，前台模板等；
//                            </li>
//                        </foreach>
//                    </ul>
//                </if>
//然后因为这次的模块的显示是根据有这个数据就显示，没有这个数据就不显示，所以他的模板会发生变化，就是在resource\admin\module.php
//自定义插件或是当前插件下面再写上一个继承，
// <ul class="list-group menus">
//<blade name="modulename"/>
//</ul>
//所以让子页面index.php
//<extend file='resource/admin/module'/>
//<block name="modulename">
//就是继承的时候有两部分的继承
//改完模板就是去控制器中泄放阀来实现增删改查
//然后就是要去将这里的数据分配到页面中了，那这里再循环数据的时候还是要通过自定义标签来循环数据；
//所以还有一个问题，就是此时是在自定义的模块中进行第一标签，所以应该使用一个框架自带的标签文件为跳板，然后跳转到自己的定义的标签中
//1.先是在system\tag\common.php中定义标签；
//首先是声明了一个标签
//'tag'  => [ 'block' => true , 'level' => 4 ] ,
//然后是写了一个处理模块标签的方法，其实就是实例化模块中的类然后实例化模块中的方法
/*
* 处理模块标签
* @param $attr
* @param $content
* @param $view
*/
	//<tag action='links.links'></tag>
	//<tag action='模块.system/Tag/方法'></tag>
	public function _tag( $attr , $content , &$view)
	{
		$info  = explode('.',$attr['action']);
		$addons_module = $info[0];//调用那个模块处理，就是模块的名字
		$action = $info[1];//方法，调用模块中的方法的名字
		//看请求处理的模块是不是系统模块，然后拼接要实例化的类的路径
		$moduleData = Db::table('module')->where('module_name',$addons_module)->first();
		//这里是在system里面创建了一个tag.php的类来进行自定义标签的创建
		$class = ($moduleData['module_is_system']==1 ? 'module': 'addons') .'\\' .$addons_module . '\system\Tag';
		return (new $class)->$action($attr , $content);
		//(new \addons\links\system\Tag())->links();
	}
	//下面就是进入到了tag这个类的这个方法中
class Tag
{
	public function links($attr , $content)
	{
		$row = isset($attr['row']) ? $attr['row'] : -1;
		$str = <<<str
<?php
	\$db = Db::table('addons_links')->orderBy('links_orderby','desc');
	if($row>0){
		\$db->limit($row);
	}
	\$data = \$db->get();
	foreach(\$data as \$field):
?>
	$content
<?php 
	endforeach
?>
str;
		return $str;
	}
}
}

//然后就是要在前台的页面中写
//<div id="webs">
//		<tag action='links.links' row="3">---------这里是要跳转到links模块中的system\tag\links方法中；
//			<a target="_blank" href="{{$field['links_url']}}">{{$field['links_name']}}</a>
//		</tag>
//	</div>


